package org.loneranger.p1_get_bean.demo;

import org.loneranger.p1_get_bean.config.MyComponentConfig;
import org.loneranger.p1_get_bean.bean.MySnake;
import org.loneranger.p1_get_bean.bean.MySnakeFactoryBean;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * 通过FactoryBean的方式获取bean对象
 * 自定义FactoryBean需要实现FactoryBean接口
 * 通过getObject方法返回bean对象
 *
 * @author loneranger
 */
public class FactoryBeanTest {

	public static void main(String[] args) throws Exception {
		AnnotationConfigApplicationContext applicationContext =
				new AnnotationConfigApplicationContext(MyComponentConfig.class);

		/**
		 * 通过 名称 获取到的对象是FactoryBean创建的bean对象
		 */
		MySnake mySnake = applicationContext.getBean("mySnake",
				MySnake.class);

		mySnake.intro();

		/**
		 * 通过 &名称 获取到的对象是FactoryBean对象
		 */
		MySnakeFactoryBean mySnakeFactoryBean = applicationContext.getBean("&mySnake",
				MySnakeFactoryBean.class);

		MySnake mySnake1 = (MySnake) mySnakeFactoryBean.getObject();

		mySnake1.intro();

		System.out.println("两个snake是否相等 - " + (mySnake == mySnake1));

		/**
		 * getObject与从ApplicationContext中获取的对象不是同一个对象
		 */
		MySnake mySnake2 = applicationContext.getBean("mySnake",
				MySnake.class);

		System.out.println("两个snake是否相等 - " + (mySnake == mySnake2));


	}
}
